﻿using System;
using System.Collections;//--数据结构--使用arrayList 一定要使用这个命名空间

namespace Csharp数据结构01
{
    class Program
    {
        static void Main(string[] args)
        {
            #region ArrayList 展示
            //ArrayList arraylist = new ArrayList();
            ////添加
            //for (int i = 0; i < 10; i++) 
            //{
            //    arraylist.Add(i);
            //}
            ////输出
            //for(int i = 0; i < arraylist.Count; i++) 
            //{
            //    Console.WriteLine(arraylist[i]);
            //}
            ////删除后再打印
            ////---------------------------------
            //arraylist.RemoveAt(8);
            //Console.WriteLine("——————————————————————————");
            //for (int i = 0; i < arraylist.Count; i++)
            //{
            //    Console.WriteLine(arraylist[i]);
            //}
            //arraylist.Add(8);
            //Console.WriteLine("--------------------------");
            //for (int i = 0; i < arraylist.Count; i++)
            //{
            //    Console.WriteLine(arraylist[i]);
            //}
            #endregion

            #region 例子
            //添加声明一个ArrayList对象
            //给其随机添加1百万个int类型的数据（0到1百万）
            //写一个静态方法，给这个ArrayList排序
            //调用它，然后打印出ArrayList中的每一个元素，记录时间，从调用排序到打印需要多少时间
            //再调用ArrayList自己的排序方法，并打印每一个元素，并记录时间

            //冒泡排序
            //ArrayList List = new ArrayList();
            //非静态类实例化一个对象

            //随机添加
            //Random r =new Random();


            //for (int i = 0; i <= 10; i++)
            //{
            //    List.Add(r.Next(0,11));//随机添加
            //}

            //Sort(List);

            //快速排序
            //做游戏物品背包需要排序
            //策略游戏也需要

            //List.Sort();//直接调用ArrayList的排序方法
            //for (int i = 0; i <= 10; i++)
            //{
            //    Console.WriteLine(List[i]);//打印出来
            //}

            //if (List.Contains(9))-----检测是否包含
            //{
            //    Console.WriteLine("111111111111");
            //}

            //Console.WriteLine(List.IndexOf(8));//找到对应元素的下标号----找到8的下标号

            #endregion

            ////赋值

            //ArrayList monsterList = new ArrayList();
            //for (int i=0;i<10;i++) 
            //{
            //    monsterList.Add(new Monster("第"+i+"号哥布林"));
            //}

            ////打印
            //for (int i = 0; i < monsterList.Count; i++)
            //{
            //    if (monsterList[i] is Monster)
            //    {
            //        (monsterList[i] as Monster).attack();//攻击
            //    }
            //}

            #region ArrayList 学习
            //for (int i = 0; i < 10; i++)
            //{
            //    new Monster("第" + i + "号哥布林");
            //}

            //for (int i = 0; i < MonsterMange.Instance.monsterList.Count; i++) 
            //{
            //    if (MonsterMange.Instance.monsterList[i] is Monster)
            //    {
            //        (MonsterMange.Instance.monsterList[i] as Monster).attack();
            //    }
            //}
            #endregion
        }
        //public static void Sort(ArrayList List) 
        //{
        //    for (int i = 0; i < List.Count; i++) 
        //    {
        //        //count-----记录当前实际拥有的元素个数
        //        for (int j = 0;j<List.Count - 1 - i; j++) 
        //        {
        //            if ((int)List[j] < (int)List[j + 1])//强转int类型
        //            {
        //                object temp = List[j];
        //                List[j] = List[j + 1];
        //                List[j + 1] = temp;
        //            }
        //        }
        //    }
        //}


    }

    #region ArryList 是封装后的数组

    //是封装后的数组，里面的元素容器为object类型
    //这样ArrayList就适用于所有的数组类型
    //因为object类型是所有的父类，又因为里氏转化原则，父类可以装在子类
    //所以ArrayList可以装载所有数据类型


    //多了一些属性
    //         Count：记录我当前拥有多少个元素
    //         Capacity：记录我当前可以包含多少个元素
    //方法：
    //         添加.Add(object value) 把当前这个对象添加到数组中
    //         删除.Remove(object value) 查询次元素，并移除第一个匹配的元素项
    //         .RemoveAt(int index) 根据下标号移除该元素 
    //         插入 .Insert(int index,Object value)
    //              把对应对象插入到对应的下标
    //         访问/修改：通过索引器下标号
    //         排序.Sort();
    //         反转： .Reverse();
    //         检查是否包含：.Contains(object value)
    //         检测该集合是否包含该元素 如果包含返回true，不包含返回false
    //         查找索引: .IndexOf(object value)
    //         找到第一个匹配该元素的下标号并返回，如果没找到就返回-1


    #endregion
}
